iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
自我挑戰組

入坑 RoR 必讀 - Ruby 物件導向設計實踐系列 第 28

Day28 Ruby物件導向實踐-Error Handling

  • 分享至 

  • xImage
  •  

今天這個主題主要是因為工作上剛好在處理到 http 的 404 error 和 500 error 的 case,想說不如就趁機將研究的內容記錄下來,釐清 ruby 的Error Handling機制是如何運作。

所謂的Error Handling就是指當我們執行程式遇到錯誤時的錯誤處理機制,我們可以先看一下這張錯誤的架構圖(如圖):
https://ithelp.ithome.com.tw/upload/images/20230928/201454093idQ2ZThNJ.png
Ruby 中的錯誤處理機制提供我們捕獲錯誤和處理程式運行中可能發生的錯誤,以確保程式能夠正常執行,而不是直接爛掉或產生不可控制的行為。

Exception

指當程式執行過程中發生了意外或不正常的狀況,而導致程式無法正常繼續執行的事件。異常通常代表了錯誤、問題或不正確的情況,需要被處理或捕獲。

異常處理通常包括以下步驟:

  1. 生成異常:當某個錯誤條件發生時,程式會創建一個異常對象並引發該異常。
  2. 捕獲異常:開發者可以使用 try-catchbegin-rescue(在Ruby中)等結構來捕獲異常。這允許程式在發生異常時採取特定的處理步驟。
  3. 處理異常:捕獲到異常後,開發者可以執行一些處理邏輯,例如記錄錯誤、提供替代行動、回滾操作等。
  4. 傳遞異常:在某些情況下,如果無法處理異常,則可以選擇將異常繼續傳遞給上層的異常處理程式或呼叫者,直到它被處理為止。

begin、rescue、end

Ruby 使用 beginrescueend 關鍵字來實現錯誤處理,這些關鍵字可以用於監視可能引發異常的代碼區塊。

begin
  # 可能引發異常的程式碼
rescue SomeErrorClass => e
  # 當 SomeErrorClass 的異常發生時,進行處理的程式碼
else
  # 如果沒有發生異常,執行的代碼
ensure
  # 無論是否有異常都會執行的代碼
end
  • begin: begin 標記了開始監視可能引發異常的程式碼區塊。
  • rescue SomeErrorClass => e: rescue 用於捕獲異常。在這裡,SomeErrorClass 是想要捕獲的異常類別(例如 StandardError 或自定義的異常類別),e 是一個變數,用來包含捕獲到的異常的實例。可以使用這個變數來印出異常的相關信息。
  • else: 包含在沒有異常發生時要執行的程式碼,通常可以省略它。
  • ensure: 無論是否發生異常都要執行的程式碼,通常用於執行清理操作,無論是否發生了異常,都會確保資源被釋放或其他必要的操作被執行。

舉例:

begin
  # 可能引發異常的代碼
  result = 10 / 0  # 這裡會引發 ZeroDivisionError
rescue ZeroDivisionError => e
  # 當 ZeroDivisionError 異常發生時,進行處理的代碼
  puts "錯誤訊息: #{e.message}"
else
  puts "這段程式碼不會執行,因為有異常發生"
ensure
  puts "這段程式碼一定會執行,不論是否有異常"
end

參考資料:


上一篇
Day27 Ruby物件導向與實踐-*與**
下一篇
Day29 Ruby物件導向實踐-Ruby Object Model
系列文
入坑 RoR 必讀 - Ruby 物件導向設計實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言